// 在文件顶部添加以下变量
static uint8_t isFading = 0;           // 渐变状态标志
static uint32_t fadeStartTime = 0;     // 渐变开始时间
static float startBrightness = 0.0f;   // 渐变开始亮度
static float targetBrightness = 0.0f;  // 渐变目标亮度
#define FADE_DURATION_MS 500           // 渐变持续时间500毫秒

void LEDChange(void) {
    // 距离检测和稳定逻辑保持不变
    // ...现有代码...
    
    // 当检测到距离稳定变化时，启动非阻塞渐变
    if (distanceStable && (fabs(distance - lastDistance) > 10)) {
        lastDistance = distance;
        float newRatio = calculateNewRatio(distance); // 假设的函数，根据距离计算目标亮度比例
        fadeToTargetRatio(newRatio);
        distanceStable = 0;
        stableStartTime = 0;
    }
    
    // 更新渐变状态
    updateFading();
}